﻿using System.Diagnostics;
using System.Windows;
using System.Windows.Browser;
using Kurax.BoardGames.Client.Engine;
using Kurax.BoardGames.Client.Views;

namespace Kurax.BoardGames.Client {
    public partial class App {
        private void Application_Startup(object sender, StartupEventArgs e) {
            //var client = CommonServicesClient.Create();
            //client.GetUserCompleted += (_, __) => {
            //    var s = __.Result;
            //};
            //client.GetUserAsync("dasda");
            this.RootVisual = GameContext.Current.User.IsAuthenticated ? new MainPage() : (UIElement)new Login();
        }

        private void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) {
            // If the app is running outside of the debugger then report the exception using
            // the browser's exception mechanism. On IE this will display it a yellow alert 
            // icon in the status bar and Firefox will display a script error.
            if(Debugger.IsAttached)
                return;
            // This will allow the application to continue running after an exception has been thrown
            // but not handled. 
            // For production applications this error handling should be replaced with something that will 
            // report the error to the website and stop the application.
            e.Handled = true;
            Deployment.Current.Dispatcher.BeginInvoke(() => this.ReportErrorToDOM(e));
        }

        private void ReportErrorToDOM(ApplicationUnhandledExceptionEventArgs e) {
            try {
                var errorMsg = e.ExceptionObject.Message + e.ExceptionObject.StackTrace;
                errorMsg = errorMsg.Replace('"', '\'').Replace("\r\n", @"\n");

                HtmlPage.Window.Eval("throw new Error(\"Unhandled Error in Silverlight Application " + errorMsg + "\");");
            } catch {
                //
            }
        }

        public App() {
            this.Startup += this.Application_Startup;
            this.UnhandledException += this.Application_UnhandledException;
            this.InitializeComponent();
        }
    }
}
